package com.system.cacheClient.client;

import com.system.cacheClient.common.CacheR;

import java.util.Map;
import java.util.Set;

/**
 * Hash缓存客户端接口
 * 提供Hash类型的特殊操作方法
 */
public interface HashCacheClient {
    
    /**
     * 向Hash中添加键值对
     * @param key Hash键
     * @param hashKey Hash中的键
     * @param value Hash中的值
     * @param <T> 数据类型
     * @return 操作结果
     */
    <T> CacheR<Boolean> hset(String key, String hashKey, T value);
    
    /**
     * 获取Hash中指定键的值
     * @param key Hash键
     * @param hashKey Hash中的键
     * @param <T> 数据类型
     * @return Hash中的值
     */
    <T> CacheR<T> hget(String key, String hashKey);
    
    /**
     * 删除Hash中指定键的值
     * @param key Hash键
     * @param hashKeys Hash中的键列表
     * @return 删除的键数量
     */
    CacheR<Long> hdel(String key, String... hashKeys);
    
    /**
     * 获取Hash中所有的键
     * @param key Hash键
     * @return Hash中的所有键
     */
    CacheR<Set<String>> hkeys(String key);
    
    /**
     * 获取Hash中所有的值
     * @param key Hash键
     * @param <T> 数据类型
     * @return Hash中的所有值
     */
    <T> CacheR<java.util.List<T>> hvals(String key);
    
    /**
     * 获取Hash中所有的键值对
     * @param key Hash键
     * @param <T> 数据类型
     * @return Hash中的所有键值对
     */
    <T> CacheR<Map<String, T>> hgetall(String key);
    
    /**
     * 获取Hash的大小
     * @param key Hash键
     * @return Hash的大小
     */
    CacheR<Long> hlen(String key);
}